//
//  StatusListViewModel.swift
//  个人微博
//
//  Created by 一介布衣 on 16/2/27.
//  Copyright © 2016年 HUAMANLOU. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

class StatusListViewModel: NSObject {
    
    // 模型数组
    lazy var statuses = [Status]()
    
    func loadHomeData(indicatorView:UIActivityIndicatorView, finishied:(isSuccess: Bool)->()) {
        let urlString = "2/statuses/home_timeline.json"
        guard let token = AccountViewModel.sharedAccountViewModel.access_token else {
            SVProgressHUD.showErrorWithStatus("请先登录")
            return
        }
        
        var parameters = ["access_token": token]
        
        // 获取最新数据所必需的一个参数
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        
        // 解决since_id 和 max_id 同时传递的情况
        if indicatorView.isAnimating() {
            // 小菊花正在转动，上拉加载更多数据
            max_id = self.statuses.last?.id ?? 0
            
        }else {
            since_id = self.statuses.first?.id ?? 0
        }
        
        
        
        if since_id > 0 {
            parameters["since_id"] = "\(since_id)"
        }
        
        
        if max_id > 0 {
            // max_id:若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
            // 减1是为了解决数据重复的bug
            parameters["max_id"] = "\(max_id-1)"
        }
        
        
        HTTPClient.sharedClient.requestJSONDict(.GET, urlString: urlString, parameters: parameters) { (dict, error) -> () in
            
            if error != nil {
                // 执行失败的回调
                finishied(isSuccess: false)
                return
            }
            
            // 2.在字典中通过“statuses”这个key来去获取微博数组数据
            guard let array = dict!["statuses"] as? [[String:AnyObject]] else {
                SVProgressHUD.showErrorWithStatus("数据类型不匹配")
                // 执行失败的回调
                finishied(isSuccess: false)
                return
            }
            
            var tempArr = [Status]()
            // 3.遍历数组，获取单个的字典对象
            for item in array {
                //                print(item["text"])
                //                print(item["source"])
                // 4.字典转模型
                let model = Status(dict: item)
                // 5.将模型数据添加到数组中
                tempArr.append(model)
            }
            
            // 记录数据
            if since_id > 0 {
                // 在数组的前面进行添加的操作
                self.statuses = tempArr + self.statuses
            }else if max_id > 0 {
                //上拉加载更多数据
                self.statuses = self.statuses + tempArr
                // 停止小菊花转动
                indicatorView.stopAnimating()
            }else {
                // 首次加载数据（下拉刷新数据）
                self.statuses = tempArr
            }
            
            // 执行成功的回调
            finishied(isSuccess: true)
            
        }
    }
}
